FastAPI-তে Request Body এর মাধ্যমে Complex Data হ্যান্ডলিং করা অত্যন্ত সহজ এবং কার্যকর। Pydantic মডেল ব্যবহার করে আমরা খুব সহজেই Nested Models, Lists, Dictionaries এবং অন্যান্য জটিল ডাটা স্ট্রাকচার হ্যান্ডল করতে পারি। FastAPI স্বয়ংক্রিয়ভাবে ইনপুট ডাটার টাইপ যাচাই, ভ্যালিডেশন, এবং ডেসিরিয়ালাইজেশন করে।
এখানে আমরা দেখব কিভাবে FastAPI তে Complex Data Structures যেমন Nested Models, List of Objects, Dictionaries, এবং অন্যান্য জটিল ডাটা হ্যান্ডলিং করা যায়।
Step 1: Nested Models (অন্য মডেলের মধ্যে মডেল)
FastAPI তে আপনি একটি মডেলের মধ্যে অন্য মডেল ব্যবহার করতে পারেন (Nested Models)। এর মাধ্যমে আপনি জটিল ডাটা স্ট্রাকচার তৈরি করতে পারবেন।
উদাহরণ: Nested Models
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# Manufacturer Model
class Manufacturer(BaseModel):
name: str
country: str
# Item Model (Nested Model)
class Item(BaseModel):
name: str
price: float
manufacturer: Manufacturer
@app.post("/items/")
def create_item(item: Item):
return {"item_name": item.name, "item_price": item.price, "manufacturer": item.manufacturer}
এখানে, Item মডেলে Manufacturer মডেলটি nested হিসেবে ব্যবহৃত হয়েছে।
রিকোয়েস্ট উদাহরণ (Nested Data):
{
"name": "Laptop",
"price": 1500.00,
"manufacturer": {
"name": "TechCorp",
"country": "USA"
}
}
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00,
"manufacturer": {
"name": "TechCorp",
"country": "USA"
}
}
Step 2: List of Objects (Object এর তালিকা)
FastAPI তে আপনি List বা Array এর মধ্যে একাধিক মডেল ব্যবহার করতে পারেন। এটি ডাটা লিস্ট বা অ্যারের মাধ্যমে ইনপুট গ্রহণের জন্য খুবই কার্যকর।
উদাহরণ: List of Objects
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
# Item Model
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
def create_items(items: List[Item]):
return {"items": items}
এখানে, List[Item] ব্যবহার করা হয়েছে, যা ইনপুট হিসাবে একাধিক Item অবজেক্ট গ্রহণ করবে।
রিকোয়েস্ট উদাহরণ (List of Objects):
[
{"name": "Laptop", "price": 1500.00},
{"name": "Smartphone", "price": 800.00}
]
রেসপন্স:
{
"items": [
{"name": "Laptop", "price": 1500.00},
{"name": "Smartphone", "price": 800.00}
]
}
Step 3: Dictionary of Objects (অবজেক্টের ডিকশনারি)
FastAPI তে Dictionary বা Map এর মধ্যে key-value পেয়ার হিসেবে ডাটা গ্রহণ করতে পারেন। এর মাধ্যমে আপনি key এবং value এর মাধ্যমে complex data structures তৈরি করতে পারেন।
উদাহরণ: Dictionary of Objects
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Dict
app = FastAPI()
# Item Model
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
def create_items(items: Dict[str, Item]):
return {"items": items}
এখানে, Dict[str, Item] ব্যবহার করা হয়েছে, যা key হিসেবে স্ট্রিং এবং value হিসেবে Item মডেল গ্রহণ করবে।
রিকোয়েস্ট উদাহরণ (Dictionary of Objects):
{
"item1": {"name": "Laptop", "price": 1500.00},
"item2": {"name": "Smartphone", "price": 800.00}
}
রেসপন্স:
{
"items": {
"item1": {"name": "Laptop", "price": 1500.00},
"item2": {"name": "Smartphone", "price": 800.00}
}
}
Step 4: Mixed Complex Data (নেস্টেড ডাটা, লিস্ট এবং ডিকশনারি)
FastAPI তে Mixed Complex Data ব্যবহার করে আপনি একসাথে Nested Models, Lists, এবং Dictionaries ব্যবহার করতে পারেন।
উদাহরণ: Mixed Complex Data
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List, Dict
app = FastAPI()
# Manufacturer Model
class Manufacturer(BaseModel):
name: str
country: str
# Item Model
class Item(BaseModel):
name: str
price: float
manufacturer: Manufacturer
# Order Model (Nested, List, Dictionary)
class Order(BaseModel):
order_id: int
items: List[Item]
shipping_address: Dict[str, str]
@app.post("/orders/")
def create_order(order: Order):
return {"order_id": order.order_id, "items": order.items, "shipping_address": order.shipping_address}
এখানে, Order মডেলটি একসাথে Item, List, এবং Dictionary মডেলগুলোর সংমিশ্রণ করেছে।
রিকোয়েস্ট উদাহরণ (Mixed Complex Data):
{
"order_id": 123,
"items": [
{"name": "Laptop", "price": 1500.00, "manufacturer": {"name": "TechCorp", "country": "USA"}},
{"name": "Smartphone", "price": 800.00, "manufacturer": {"name": "MobileTech", "country": "China"}}
],
"shipping_address": {
"street": "123 Main St",
"city": "New York",
"zip": "10001"
}
}
রেসপন্স:
{
"order_id": 123,
"items": [
{"name": "Laptop", "price": 1500.00, "manufacturer": {"name": "TechCorp", "country": "USA"}},
{"name": "Smartphone", "price": 800.00, "manufacturer": {"name": "MobileTech", "country": "China"}}
],
"shipping_address": {
"street": "123 Main St",
"city": "New York",
"zip": "10001"
}
}
Step 5: Validation and Constraints on Complex Data
FastAPI এবং Pydantic এর মাধ্যমে Complex Data এর জন্য validation এবং constraints ব্যবহার করা যায়। যেমন, min_length, max_length, gt, lt, regex ইত্যাদি।
উদাহরণ: Validation with Constraints on Complex Data
from pydantic import BaseModel, Field
from typing import List
class Item(BaseModel):
name: str = Field(..., min_length=3)
price: float = Field(..., gt=0)
class Order(BaseModel):
order_id: int
items: List[Item]
shipping_address: str
@app.post("/orders/")
def create_order(order: Order):
return {"order_id": order.order_id, "items": order.items, "shipping_address": order.shipping_address}
এখানে:
name: ৩টি অক্ষরের কম হবে না (min_length=3)।price: ০ এর বেশি হতে হবে (gt=0)।
FastAPI তে Request Body এর মাধ্যমে Complex Data হ্যান্ডলিং একটি শক্তিশালী বৈশিষ্ট্য। Pydantic মডেল ব্যবহার করে আপনি সহজেই Nested Models, Lists, Dictionaries, এবং Mixed Data Structures হ্যান্ডল করতে পারেন। এছাড়াও, ইনপুট ডাটার জন্য validation এবং constraints ব্যবহার করে ডাটা প্রক্রিয়া আরও নিরাপদ এবং নির্ভুল করা যায়। FastAPI এই সমস্ত ডাটা মডেলিং এবং হ্যান্ডলিং অপারেশনকে খুব সহজ ও দ্রুত করে তোলে।
Read more